<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>includes方法</title>
</head>
<body>
  <script>
    // Array.prototype.includes方法返回一个布尔值，表示某个数组是否包含给定的值，与字符串的includes方法类似
    [1,2,3].includes(2); // true
    [1,2,3].includes(4); // false
    [1,2,NaN].includes(NaN);// true
    /**
     * 该方法的第二个参数，表示搜索的起始位置，默认为0.如果第二个参数，为负数，则表示倒数的位置，
     * 如果这时它大于数组长度，(比如第二个参数为-4)，但是数组长度为3，则会重置为从0开始。
    */
   [1,2,3].includes(3,3) // false
   [1,2,3].includes(3,-1) // true
   /**
    * indexOf方法有俩个缺点，一是不够语义化，它的含义是找到参数值的第一个出现位置，
    * 所以要去比较是否不等于-1，表达起来不够直观。二是它内部使用严格相等运算符(===)进行判断
    * 这会导致对NaN的误判。
    *
    *
    * 另外，Map和Set数据结构有一个hsa方法，需要注意与includes区分
    * Map结构的has方法：是用来查找键名的，比如Map.prototype.has(key)、WeakMap.prototype.has(key)、
    * Reflect.has(target, propertyKey)。
    *
    * Set 结构的has方法，是用来查找值的，比如Set.prototype.has(value)、WeakSet.prototype.has(value)。
   */
  </script>
</body>
</html>